import axios from "axios";
import {message} from 'antd'

const instance = axios.create({    //创建axios实例，在这里可以设置请求的默认配置
    timeout: 10000, // 设置超时时间10s
    baseURL: 'http://47.110.74.37:7001/'   //根据自己配置的反向代理去设置不同环境的baeUrl
})
// 统一设置post请求头  ---可以单独设置下载需要的bold
instance.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8'

let httpCode = {        
    400: '请求参数错误',
    401: '权限不足, 请重新登录',
    403: '服务器拒绝本次访问',
    404: '请求资源未找到',
    500: '内部服务器错误',
    501: '服务器不支持该请求中使用的方法',
    502: '网关错误',
    504: '网关超时'
}

/** 添加请求拦截器 **/
instance.interceptors.request.use((config: { headers: { [x: string]: string; }; url: string | string[]; }) => {
    config.headers['token'] = '11111'
    return config
}, (error: any) => {
    // 对请求错误做些什么
    return Promise.reject(error)
})

/** 添加响应拦截器  **/
instance.interceptors.response.use((response: { statusText: string; data: { message: any; }; }) => {
    if (response.statusText === '200') {     
        return Promise.resolve(response.data)
    } else {
        message.error('响应超时')
        return Promise.reject(response.data.message)
    }
}, (error: { response: { status: string | number; data: { message: any; }; }; }) => {
    if (error.response) {
        // 根据请求失败的http状态码去给用户相应的提示
        let tips = error.response.status in httpCode ? httpCode[error.response.status] : error.response.data.message
        message.error(tips)
        if (error.response.status === 401) {    // token或者登陆失效情况下跳转到登录页面
            //针对框架跳转到登陆页面
            window.location.href='/login'
        }
        return Promise.reject(error)
    } else {
        message.error('请求超时, 请刷新重试')
        return Promise.reject('请求超时, 请刷新重试')
    }
})

// 移除拦截器
// axios.interceports.request.eject(变量名称===拦截器的名称)

/* 统一封装get请求 */
export const get = (url: string, params?: object, config = {}) => {
    return new Promise((resolve, reject) => {
        instance({
            method: 'get',
            url,
            params,
            ...config
        }).then((response: unknown) => {
            resolve(response)
        }).catch((error: any) => {
            reject(error)
        })
    })
}

/* 统一封装post请求  */
export const post = (url: string, data: object, config = {}) => {
    return new Promise((resolve, reject) => {
        instance({
            method: 'post',
            url,
            data,
            ...config
        }).then((response: unknown) => {
            resolve(response)
        }).catch((error: any) => {
            reject(error)
        })
    })
}
